[PATCH] FIX: Add spare throws exception

sync_metadata() requires st->sb to be loaded, otherwise exception is generated.
This fails expansion, because spares cannot be added.

Patch loads anchor before Manage.c reference to st->sb.

NOTE: This fixes Raid5 expansion, Raid0 expansion is still broken.

Signed-off-by: Adam Kwolek <adam.kwolek [at] intel.com>
---

Manage.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/Manage.c b/Manage.c
index 5808557..6233257 100644
--- a/Manage.c
+++ b/Manage.c
[at] [at] -895,6 +895,7 [at] [at] int Manage_subdevs(char *devname, int fd,
int container_fd;
int devnum = fd2devnum(fd);
int dfd;
+ char container[40];

container_fd = open_dev_excl(devnum);
if (container_fd < 0) {
[at] [at] -904,7 +905,9 [at] [at] int Manage_subdevs(char *devname, int fd,
tst->ss->free_super(tst);
return 1;
}
-
+ fmt_devname(container, st->container_dev);
+ st->ss->load_container(st,
+ container_fd, container);
dfd = dev_open(dv->devname, O_RDWR | O_EXCL|O_DIRECT);
if (mdmon_running(tst->container_dev))
tst->update_tail = &tst->updates;
[at] [at] -912,12 +915,14 [at] [at] int Manage_subdevs(char *devname, int fd,
dv->devname)) {
close(dfd);
close(container_fd);
+ st->ss->free_super(st);
return 1;
}
if (st->update_tail)
flush_metadata_updates(st);
else
tst->ss->sync_metadata(st);
+ st->ss->free_super(st);

sra = sysfs_read(container_fd, -1, 0);
if (!sra) {

--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo [at] vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
adam.kwolek [ Fr, 18 März 2011 08:51 ] [ ID #2056763 ]
Linux » gmane.linux.raid » [PATCH] FIX: Add spare throws exception

Vorheriges Thema: [PATCH 0/4] Raid0 metadata cannot be recognized
Nächstes Thema: [PATCH 13/36] md,rcu: convert call_rcu(free_conf) to kfree_rcu()